<?php
// 添加自定义类加载器，确保能加载项目中的类
function custom_autoloader($class) {
    // 将命名空间转换为文件路径
    $classPath = str_replace('\\', DIRECTORY_SEPARATOR, $class);
    
    // 项目根目录
    $baseDir = dirname(__DIR__) . DIRECTORY_SEPARATOR;
    
    // 尝试加载类文件
    $filePath = $baseDir . $classPath . '.php';
    if (file_exists($filePath)) {
        require_once $filePath;
        return true;
    }
    return false;
}

// 注册自定义类加载器
spl_autoload_register('custom_autoloader');

// 使用正确的路径包含autoload.php
require_once dirname(__DIR__) . '/vendor/autoload.php';

// 定义项目根路径
$appPath = dirname(__DIR__) . DIRECTORY_SEPARATOR;

// 文档输出路径
$outputFile = $appPath . 'public' . DIRECTORY_SEPARATOR . 'swagger.json';

echo "正在生成Swagger文档...\n";

// 设置错误报告，以便更好地调试
ini_set('display_errors', '1');
error_reporting(E_ALL);

try {
    echo "开始扫描文件...\n";
    
    // 直接指定要扫描的文件路径
    $userControllerPath = $appPath . 'application/controller/User.php';
    $openApiSpecPath = $appPath . 'application/OpenApiSpec.php';
    
    $scanFiles = [$openApiSpecPath, $userControllerPath];
    
    echo "扫描文件: " . implode(", ", $scanFiles) . "\n";
    
    // 使用正确的扫描方法
    $openapi = \OpenApi\Generator::scan($scanFiles, [
        'debug' => true,
        'validate' => true,
        'version' => '3.0.0'
    ]);
    
    echo "扫描完成，准备保存文档...\n";
    
    // 确保目录存在
    $outputDir = dirname($outputFile);
    if (!is_dir($outputDir)) {
        echo "错误: 输出目录不存在: $outputDir\n";
        exit(1);
    }
    
    // 保存生成的文档
    $result = file_put_contents($outputFile, $openapi->toJson(JSON_PRETTY_PRINT));
    
    if ($result === false) {
        echo "错误: 无法写入文档文件\n";
        exit(1);
    }
    
    echo "文档已成功生成到: $outputFile\n";
    
    // 显示生成的文档内容预览
    if (file_exists($outputFile)) {
        $content = file_get_contents($outputFile);
        echo "文档内容大小: " . strlen($content) . " 字节\n";
        
        if (strlen($content) > 0) {
            echo "文档内容预览:\n" . substr($content, 0, 500) . (strlen($content) > 500 ? "..." : "") . "\n";
        } else {
            echo "警告: 生成的文档为空\n";
        }
    }
} catch (Exception $e) {
    echo "错误: " . $e->getMessage() . "\n";
    echo "错误文件: " . $e->getFile() . " 行: " . $e->getLine() . "\n";
    echo "错误跟踪: " . $e->getTraceAsString() . "\n";
    exit(1);
}
